Nayuta Blog 出てきた用語など
Noise Protocol
ネゴシエーションや符号化の仕方。
node_id
Bitcoinの公開鍵と同じ計算で求めた33byteのデータ
BOLTのメッセージ
「メッセージ長」と「メッセージ本体」に分かれる
メッセージ長→ChaChaPoly-1305で符号化+MAC付加する(2+16byte)
メッセージ本体→ChaChaPoly-1305で符号化+MAC付加する(メッセージ長+16byte)
rotation処理
鍵の変更などで使う?。符号化や復号化の鍵はネゴシエーション時のものを使い続けるのではなく、1000回符号化や復号化するたびに行われるもの。
init
ネゴシエーション後、最初に送信するBOLTメッセージ。
パラメータはglobal, local, featureである。
channel_id
チャネルについた識別子。BOLTメッセージに載せて通信していく。
Channel Establishment
チャネルを開設する処理。on-chainからoff-chainに制御を移す。移す際は2 of 2のMultiSigを行う。
鍵(公開鍵)の種類
localkey, remotekey, local_delayedkey, remote_delayedkey, local_revocationkey, remote_revocationkey, local_htlckey, remote_htlckeyがある。
accept_channel.minimum_depth
funding transactionの展開を行った後、安定するまでどのくらい待つかを決めるのに用いられている。fundee側によって決められる。minimum_depth以上のブロック数が経過すると、双方がfunding_lockedメッセージを送信する。
next_per_commitment_point
メッセージで交換されるもの。次の鍵を生成するためのper_commitment_pointになる。
per_commitment_point
鍵を生成するための重要な情報。これ以降、commitment transactionの配分を変更するたびにBOLTメッセージを交換するが、配分を変更したことを確定するために、そこまで使っていたper_commitment_pointの秘密鍵(per_commitment_secret)を相手に渡す。
Normal Operation
funding_lockedメッセージを交換すると、チャネルが解説したことになるときの状態名。
この状態になると、相手のノードに対して送金ができるようになる。
https://gyazo.com/9f63e4547b0b2cf61d0d88c92d13a242
Establish Channelのシーケンス図
HTLC
詳しくは別で。相手にわたす「Offered HTLC outputs」と、相手からもらう「Received HTLC outputs」がある。outputsとついているのは、これがcommitment transactionの送金先になるから。
HTLCのスクリプトを解く条件
請求書のIDを入手する、タイムアウトする、相手が裏切る
正常な送金の場合、請求書のIDを用いる。相手が不在や、請求書のIDがわからないままになったとしても、時間制限があるため、それをすぎると送金元が取り戻すことができるようになる。
相手が裏切って、古いcommitment transactionを使った場合は、古い鍵情報を生成するためのper_commitment_secretを持っているため配分を総取りできる。
https://gyazo.com/63b21dd3bcb81052f62128fdf49c99a4
2ノード間で送金を行った場合のシーケンス図
https://gyazo.com/c1795f81f480c1dc99a2e10d109ae66d
update_add_htlc
HTLC追加要求。最初のメッセージに使われている(その前にinvoiceが必要)。
最低限必要な情報→領収書IDのハッシュ値、請求額
領収書ID: payment_preimage, 領収書IDのハッシュ値 : payment_hash(演算はSHA256)
上記2つがあればupdate_add_htlcメッセージを作成することができる。
cltv_expiry
OP_CHECKLOCKTIMEVERIFYというBitcoinスクリプトの命令で使う値で、スクリプトの制限時間を決めるために使用する。
onion_routing_packert
送金するルートを指定した情報。
commitment_signed
funding transactionからの出力であるcommitment transactionの署名と、各HTLCについての署名を送信するメッセージ。
revoke_and_ack
今までのcommitment transactionを過去のものとして確定するためのメッセージ。
Mutual Close
お互いが同意してチャネルを閉鎖することを言う、正常な閉鎖。
Unilateral Close
チャネル開設中になにか問題が発生し、Mutual Closeの手続きができない状態になった場合、最新のCommitment transactionを展開し、資金を取り戻すチャネルの閉鎖のやりかた
to_local_outputとto_remote_output
commitment transactionを眺めた場合、fundingした資金のうち自分の取り分と相手の取り分がある。to_local_outputとto_remote_outputはそのアウトプットの名前。
to_remote_output
P2WPKHへの送金。commitment transactionを展開するとすぐに相手が使用できるが、それ以外はスクリプトへの送金になるため、スクリプトを解かなければしようできない。
to_local_output
スクリプトは自分が持つ鍵情報だけで解くことができるが、Establish Channel時に相手からもらったto_self_delay(数ブロック経過後に使えるようになるやつ)を組み込む
https://gyazo.com/e012f5c9ef7b4bb57bc08c923d977c56
payment_preimage
invoice作成元が持っているもの。invoiceに入っていたハッシュ値のもとになる値。
2点間であれば、送金した相手がpayment_preimageを持っているが、転送している場合は相手が持っているのかはわからない(送金元ノードと送金先ノードだけわかる)
送金時のことで覚えていきたいこと
・送金元は、送金先までのルートを作成する
・ルート情報は暗号化されている
・ルート情報は受け取ったチャネルは、1つ先までの転送情報を複合できる
・送金先は、次の送金先がないということがわかるし、請求書IDの元データを自分が持っていることも確認できる
node_announcement
alias名やIPアドレスなど、node自体の情報を展開している。相手nodeに接続したい場合、このnodeからIPアドレスを調べ、接続させる。